home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / ttedit / cmdialog.bas < prev    next >
BASIC Source File  |  1994-11-28  |  8KB  |  282 lines

  1. Option Explicit
  2. '
  3. ' These structures and declarations are specific to calling
  4. ' Common Dialogs
  5. '
  6.  
  7.  
  8. Type CD_OPENFILE_TYPE
  9.      FilterIndex As Integer
  10.      Filter As String
  11.      hWnd As Integer
  12.      Flags As Long
  13.      Filename As String
  14.      InitDir As String
  15.      DefaultExt As String
  16. End Type
  17.  
  18.  
  19. Type OPENFILENAME_TYPE
  20.      lStructSize As Long
  21.      hwndOwner As Integer
  22.      hInstance As Integer
  23.      lpstrFilter As Long
  24.      lpstrCustomFilter As Long
  25.      nMaxCustFilter As Long
  26.      nFilterIndex As Long
  27.      lpstrFile As Long
  28.      nMaxFile As Long
  29.      lpstrFileTitle As Long
  30.      nMaxFileTitle As Long
  31.      lpstrInitialDir As Long
  32.      lpstrTitle As Long
  33.      Flags As Long
  34.      nFileOffset As Integer
  35.      nFileExtension As Integer
  36.      lpstrDefExt As Long
  37.      lCustData As Long
  38.      lpfnHook As Long
  39.      lpTemplateName As Long
  40. End Type
  41.  
  42. Declare Function GetOpenFileName Lib "COMMDLG.DLL" (lpOPENFILENAME As OPENFILENAME_TYPE) As Integer
  43. Declare Function GetSaveFileName Lib "COMMDLG.DLL" (lpOPENFILENAME As OPENFILENAME_TYPE) As Integer
  44. Declare Function GetFileTitle Lib "COMMDLG.DLL" (ByVal FName As String, ByVal Title As String, Size As Integer)
  45.  
  46. Global Const OFN_READONLY = &H1
  47. Global Const OFN_OVERWRITEPROMPT = &H2
  48. Global Const OFN_HIDEREADONLY = &H4
  49. Global Const OFN_NOCHANGEDIR = &H8
  50. Global Const OFN_SHOWHELP = &H10
  51. Global Const OFN_ENABLEHOOK = &H20
  52. Global Const OFN_ENABLETEMPLATE = &H40
  53. Global Const OFN_ENABLETEMPLATEHANDLE = &H80
  54. Global Const OFN_NOVALIDATE = &H100
  55. Global Const OFN_ALLOWMULTISELECT = &H200
  56. Global Const OFN_EXTENSIONDIFFERENT = &H400
  57. Global Const OFN_PATHMUSTEXIST = &H800
  58. Global Const OFN_FILEMUSTEXIST = &H1000
  59. Global Const OFN_CREATEPROMPT = &H2000
  60. Global Const OFN_SHAREAWARE = &H4000
  61. Global Const OFN_NOREADONLYRETURN = &H8000
  62. Global Const OFN_NOTESTFILECREATE = &H10000
  63.  
  64. Global Const OFN_SHAREFALLTHROUGH = 2
  65. Global Const OFN_SHARENOWARN = 1
  66. Global Const OFN_SHAREWARN = 0
  67.  
  68. Type PRINTDLG_TYPE
  69.     lStructSize As Long
  70.     hwndOwner As Integer
  71.     hDevMode As Integer
  72.     hDevNames As Integer
  73.     hDC As Integer
  74.     Flags As Long
  75.     nFromPage As Integer
  76.     nToPage As Integer
  77.     nMinPage As Integer
  78.     nMaxPage As Integer
  79.     nCopies As Integer
  80.     hInstance As Integer
  81.     lCustData As Long
  82.     lpfnPrintHook As Long
  83.     lpfnSetupHook As Long
  84.     lpPrintTemplateName As Long
  85.     lpSetupTemplateName As Long
  86.     hPrintTemplate As Integer
  87.     hSetupTemplate As Integer
  88. End Type
  89.  
  90. Declare Function PrintDlg Lib "COMMDLG.DLL" (pPrintDLG As PRINTDLG_TYPE) As Integer
  91.  
  92. Global Const PD_ALLPAGES = &H0
  93. Global Const PD_SELECTION = &H1
  94. Global Const PD_PAGENUMS = &H2
  95. Global Const PD_NOSELECTION = &H4
  96. Global Const PD_NOPAGENUMS = &H8
  97. Global Const PD_COLLATE = &H10
  98. Global Const PD_PRINTTOFILE = &H20
  99. Global Const PD_PRINTSETUP = &H40
  100. Global Const PD_NOWARNING = &H80
  101. Global Const PD_RETURNDC = &H100
  102. Global Const PD_RETURNIC = &H200
  103. Global Const PD_RETURNDEFAULT = &H400
  104. Global Const PD_SHOWHELP = &H800
  105. Global Const PD_ENABLEPRINTHOOK = &H1000
  106. Global Const PD_ENABLESETUPHOOK = &H2000
  107. Global Const PD_ENABLEPRINTTEMPLATE = &H4000
  108. Global Const PD_ENABLESETUPTEMPLATE = &H8000
  109. Global Const PD_ENABLEPRINTTEMPLATEHANDLE = &H10000
  110. Global Const PD_ENABLESETUPTEMPLATEHANDLE = &H20000
  111. Global Const PD_USEDEVMODECOPIES = &H40000
  112. Global Const PD_DISABLEPRINTTOFILE = &H80000
  113. Global Const PD_HIDEPRINTTOFILE = &H100000
  114.  
  115. Type DEVNAMES
  116.     wDriverOffset As Integer
  117.     wDeviceOffset As Integer
  118.     wOutputOffset As Integer
  119.     wDefault As Integer
  120. End Type
  121.  
  122. Type DEVMODE_TYPE
  123.     dmDeviceName As String * 32
  124.     dmSpecVersion As Integer
  125.     dmDriverVersion As Integer
  126.     dmSize As Integer
  127.     dmDriverExtra As Integer
  128.     dmFields As Long
  129.     dmOrientation As Integer
  130.     dmPaperSize As Integer
  131.     dmPaperLength As Integer
  132.     dmPaperWidth As Integer
  133.     dmScale As Integer
  134.     dmCopies As Integer
  135.     dmDefaultSource As Integer
  136.     dmPrintQuality As Integer
  137.     dmColor As Integer
  138.     dmDuplex As Integer
  139.     dmYResolution As Integer
  140.     dmTTOption As Integer
  141. End Type
  142.  
  143.  
  144. Global Const DN_DEFAULTPRN = &H1
  145.  
  146. 'retrieves error value
  147. Declare Function CommDlgExtendedError Lib "COMMDLG.DLL" () As Long
  148.  
  149. '************************* end of Common Dialogs Declares ************
  150.  
  151. Sub CD_OpenFile (CD_OF As CD_OPENFILE_TYPE)
  152.     Dim OFN As OPENFILENAME_TYPE
  153.     Dim X As Integer
  154.     Dim Handle As Integer
  155.  
  156.     Handle = Prepare_OFN(CD_OF, OFN)
  157.  
  158.     If Handle Then
  159.       
  160.       X = GetOpenFileName(OFN)
  161.  
  162.       If X Then
  163.         Call hmemcpy(ByVal CD_OF.Filename, ByVal OFN.lpstrFile, Len(CD_OF.Filename))
  164.       End If
  165.       CD_OF.Filename = Left$(CD_OF.Filename, InStr(CD_OF.Filename, Chr$(0)) - 1)
  166.       X = GlobalUnlock(Handle)
  167.       X = GlobalFree(Handle)
  168.     End If
  169. End Sub
  170.  
  171. Sub CD_SaveFile (CD_FS As CD_OPENFILE_TYPE)
  172.     Dim OFN As OPENFILENAME_TYPE
  173.     Dim X As Integer
  174.     Dim Handle As Integer
  175.       
  176.     Handle = Prepare_OFN(CD_FS, OFN)
  177.     If Handle Then
  178.       X = GetSaveFileName(OFN)
  179.       If X Then
  180.         Call hmemcpy(ByVal CD_FS.Filename, ByVal OFN.lpstrFile, Len(CD_FS.Filename))
  181.         CD_FS.Filename = Left$(CD_FS.Filename, InStr(CD_FS.Filename, Chr$(0)) - 1)
  182.       Else
  183.         CD_FS.Filename = ""
  184.       End If
  185.       
  186.       X = GlobalUnlock(Handle)
  187.       X = GlobalFree(Handle)
  188.     End If
  189. End Sub
  190.  
  191. Sub PageSetup ()
  192.     Dim X As Integer
  193.     Dim Address As Long
  194.     Dim P As PRINTDLG_TYPE
  195.     Dim D As DEVMODE_TYPE
  196.  
  197.     P.lStructSize = Len(P)
  198.     P.hwndOwner = Forms(0).hWnd
  199.     P.Flags = PD_RETURNIC Or PD_HIDEPRINTTOFILE
  200.     P.nFromPage = 1
  201.     P.nToPage = 999
  202.     P.nMinPage = 1
  203.     P.nMaxPage = 999
  204.     P.nCopies = 1
  205.     X = PrintDlg(P)
  206.     
  207.     If X Then
  208.        If P.hDC Then X = DeleteDC(P.hDC)
  209.        If P.hDevNames Then X = GlobalFree(P.hDevNames)
  210.     
  211.        Address = GlobalLock(P.hDevMode)
  212.        Call hmemcpy(D, ByVal Address, Len(D))
  213.        X = GlobalUnlock(P.hDevMode)
  214.        X = GlobalFree(P.hDevMode)
  215.     
  216. '       Print "Printer:", Left$(D.dmDeviceName, InStr(D.dmDeviceName, Chr$(0)) - 1)
  217. '       Print "From Page:", P.nFromPage
  218. '       Print "To Page:", P.nToPage
  219. '       Print "Copies:", P.nCopies
  220.     End If
  221. End Sub
  222.  
  223. Private Function Prepare_OFN (CD_OF As CD_OPENFILE_TYPE, OFN As OPENFILENAME_TYPE) As Integer
  224.     Dim Handle As Integer
  225.  
  226.     Do While InStr(CD_OF.Filter, "|") > 0
  227.        Mid$(CD_OF.Filter, InStr(CD_OF.Filter, "|")) = Chr(0)
  228.     Loop
  229.  
  230.     CD_OF.InitDir = CD_OF.InitDir & Chr(0)
  231.     CD_OF.DefaultExt = CD_OF.DefaultExt & Chr(0)
  232.     CD_OF.Filename = CD_OF.Filename & String$(256, Chr(0))
  233.     CD_OF.Filter = CD_OF.Filter & Chr$(0)
  234.  
  235.     Handle = GlobalAlloc(GHND, Len(CD_OF.Filename))
  236.  
  237.     If Handle Then
  238.       OFN.lpstrFile = GlobalLock(Handle)
  239.       Call hmemcpy(ByVal OFN.lpstrFile, ByVal CD_OF.Filename, Len(CD_OF.Filename))
  240.       If CD_OF.hWnd = 0 Then CD_OF.hWnd = Forms(0).hWnd
  241.       OFN.lStructSize = Len(OFN)
  242.       OFN.hwndOwner = CD_OF.hWnd
  243.       OFN.Flags = CD_OF.Flags
  244.       OFN.nFilterIndex = CD_OF.FilterIndex
  245.       OFN.nMaxFile = 256
  246.       OFN.lpstrFilter = MemAddr(CD_OF.Filter)
  247.       OFN.lpstrInitialDir = MemAddr(CD_OF.InitDir)
  248.       OFN.lpstrDefExt = MemAddr(CD_OF.DefaultExt)
  249.     End If
  250.     Prepare_OFN = Handle
  251. End Function
  252.  
  253. Sub PrinterSetup ()
  254.     Dim X As Integer
  255.     Dim Address As Long
  256.     Dim P As PRINTDLG_TYPE
  257.     Dim D As DEVMODE_TYPE
  258.  
  259.     P.lStructSize = Len(P)
  260.     P.hwndOwner = Forms(0).hWnd
  261.     P.Flags = PD_PRINTSETUP
  262.     X = PrintDlg(P)
  263.     
  264.     If X Then
  265.       'PrintDlg() returns an hDC, a global handle to hDevNames
  266.       'and another to hDevMode.  Delete the ones we don't need
  267.       If P.hDC Then X = DeleteDC(P.hDC)
  268.       If P.hDevNames Then X = GlobalFree(P.hDevNames)
  269.  
  270.       'Make a local copy of the global block (hDevMode)
  271.       Address = GlobalLock(P.hDevMode)
  272.       Call hmemcpy(D, ByVal Address, Len(D))
  273.  
  274.       X = GlobalUnlock(P.hDevMode) 'free the memory
  275.       X = GlobalFree(P.hDevMode)
  276.    
  277. '      Print "Printer:", Left$(D.dmDeviceName, InStr(D.dmDeviceName, Chr$(0)) - 1)
  278. '      Print "Orientati